package com.stringbuffer_;

public class StringBuffer01 {
    public static void main(String[] args) {
        //1. StringBuffer 的直接父类是 AbstractStringBuilder
        //2. StringBuffer 实现了Serializable，即 StringBuffer的对象可有串行化
        //3. 在父类中，AbstractStringBuilder 有属性char[] value，不是final 该value 数组存放字符串内容，引出存放在堆中的
        //4. StringBuffer 是一个final类，不能被继承
        //5. 因为StringBuffer 字符内容存在 char[] value，所有在变化(增加/删除) 不用每次都更换地址(即不是每次创建新的对象)所以效率高于String

        //构造器的使用
        //1. 创建一个大小为 16个字符的的 char[]。用于存放字符内容
        StringBuffer stringBuffer = new StringBuffer();
        System.out.println(stringBuffer);

        //2. 通过构造器指定char[]大小
        StringBuffer stringBuffer001 = new StringBuffer(100);

        //3.通过 给一个String 创建StringBuffer ，等于当前字符串+16
        StringBuffer stringBuffer002 = new StringBuffer("hello");

        //增
        stringBuffer002.append(',');
        stringBuffer002.append("zsf");
        stringBuffer002.append(100).append(true).append(43.0);
        System.out.println(stringBuffer002);

        //删
        /*
         * 删除索引为>=start && <end 处的字符
         * 解读：删除 11～14的字符【11,14） 包含11 ，不包含14
         */
        stringBuffer002.delete(11, 14);
        System.out.println(stringBuffer002);

        //改
        stringBuffer002.replace(9, 11, "zzr");
        System.out.println(stringBuffer002);

        //查找

        int indexOf = stringBuffer002.indexOf("zzr");
        System.out.println(indexOf);

        //插
        stringBuffer002.insert(9, "赵敏");
        System.out.println(stringBuffer002.length());
        System.out.println(stringBuffer002);


        //String 转 StringBuffer
        String str = "hello tom";
        //方式1 使用构造器
        //注意：返回的才是StringBuffer对象，对str本身没有影响
        StringBuffer stringBuffer2 = new StringBuffer(str);
        //方式2 使用append方法
        StringBuffer stringBuffer3 = new StringBuffer();
        stringBuffer3 = stringBuffer3.append(str);


        //StringBuffer 转 String
        StringBuffer stringBuffer4 = new StringBuffer("hello 2021");
        // 方式1 使用 toString()方法
        String s1 = stringBuffer4.toString();

        //方式2 使用构造器
        String s2 = new String(stringBuffer4);


        String s = null;
        StringBuffer sb = new StringBuffer();
        sb.append(s);
        System.out.println(sb);
        System.out.println(sb.length());

        try {
            StringBuffer sb1 = new StringBuffer(s);
            System.out.println(sb1);
        } catch (Exception e) {
            System.out.println("赋值错误");
        }

        //eg 1
        String price = "8123546.59";
        StringBuffer sb2 = new StringBuffer(price);
        //找到小数点的索引，然后在该位置的前3位，插入即可
        for (int i = sb2.lastIndexOf(".") - 3; i > 0; i -= 3) {
            sb2 = sb2.insert(i, ",");
        }
        System.out.println(sb2);


    }
}
